/**
 * 注册全局组件, 挂载全局变量
 */
import type { App } from 'vue';
import api from './api'
import { get, post, postForm } from './utils/request'

const registerComponent = (app: App) => {
    // 要挂载到vue原型上的方法
    const methods = ['vConfirm', 'vMessage']
    // 所有组件出口文件
    const files = require.context('./common-lib/components', true, /index\.ts$/)
    files.keys().forEach((file: any) => {
        // 组件
        const com = files(file)
        // 组件名
        const comNames = Object.keys(com)
        // 遍历组件名
        comNames.forEach((item) => {
            if (methods.includes(item)) {
                // 方法挂载到vue全局方法上
                app.config.globalProperties['$' + item] = com[item]
                console.log(app.config.globalProperties.$vMessage)
            } else {
                // 注册为全局组件
                app.component(item, com[item])
            }
        })
    })
}

export default {
    install: (app: App) => {
        registerComponent(app)
        app.config.globalProperties.$api = api
        app.config.globalProperties.$http = {
            get: get,
            post: post,
            postForm: postForm
        }
    }
}
